# 异常类型

# FileNotFoundError
# 文件不存在，则会出现报错 
# 文件路径错误，或者文件名错误，也会出现报错

# IndexError
# 索引超出范围，或者索引不存在，则会出现报错
# 例如 list = [1, 2, 3]，如果访问 list[3]，则会报错，因为索引从0开始，最大索引为2

# ZeroDivisionError
# 除数为0，则会出现报错
# 例如 1 / 0，会报错，因为除数为0

# TypeError
# 类型错误，类型不匹配，则会出现报错
# 例如 'yoo'*'hi'，会报错，因为string类型不能与string类型相乘

# ValueError
# 值错误，值不合法，则会出现报错    
# 例如 int('abc')，会报错，因为'abc'不能转换为整数

# syntaxError
# 语法错误，代码不合法，则会出现报错    
# 例如 if True print('hi')，会报错，因为if语句后面必须有冒号

# indentationError
# 缩进错误，代码缩进不合法，则会出现报错    
# 例如 if True: print('hi') print('hello')，会报错，因为第二行没有缩进

# 捕获异常
try:
    # 可能会出现异常的代码
    user_weight = float(input("请输入体重（kg）："))
    user_height = float(input("请输入身高（m）：")) 
    user_BMI = user_weight / (user_height ** 2)
except ValueError:
    # 产生值错误时会运行
    print("输入错误，请输入数字。")
except ZeroDivisionError:   
    # 产生除数为0时会运行
    print("身高不能为0，请重新输入。")
except :
    # 产生其它错误时都会运行
    print("发生了其他错误，请检查代码。")
else:  
    # 没有错误时会运行
    print(f"您的BMI为：{user_BMI}")
finally:  
    # 不管发生错误与否都会运行
    print("程序执行完毕。") 